1. Field of the Invention
The present invention relates to the field of computing environments, and, more particularly, to allocating resources within a software configurable computing environment.
2. Description of the Related Art
The development of application software occurs in a series of stages. Each stage is typically performed in a different computing environment, such as a development environment, a test environment, and a production environment. A computing environment is constructed using a subset of assets, where an asset is a commodity that provides one or more computing resources for the environment. Different environments can be isolated from each other due to a variety of reasons, including security and fault tolerance. Construction of computing environments has conventionally been a manual process.
For example, to construct a test environment, a group can be formed to analyze projected needs of the test environment. Then the test environment can be implemented by manually segmenting hardware and software components. Applications for the environment can then be loaded and tested within this hardware/software environment. The group will then documenting results and specifications of the testing environment. This process can be expensive and time consuming. Accordingly, an environment is typically over resourced so that expected future needs and natural growth are taken into account, thereby alleviating the need to re-construct an environment each time the environment's needs change. Consequently, resources are not efficiently allocated for present needs.
Present attempts to automate the creation of a computing environment have been of limited utility due to cumbersome resource allocation techniques and a restricted set of configurable assets. That is, existing environment construction tools are ill-equipped to handle the challenges posed by complex systems, such as, being able to efficiently provision assets based on a multitude of hardware and software possibilities and combinations. For example, conventional tools often allocate computing resources at too low of a level, making it so difficult to rapidly construct a complex environment that experts often revert to manual allocation techniques. Alternatively, other tools allocate resources at too high a level, not permitting sufficient flexibility in constructing an environment, resulting in manual “tweaking” of an “automated” environment, thereby causing the environment construction tools to misrepresent the actual computing environment that has been established. Further, existing environment construction tools are unable to handle the scheduling and provisioning of non-hardware or non-software assets, such as, lab floor space or technical personnel needed in the operation of a specific test. Moreover, environment construction tools can be specific to different types of environments, like a production environment, a test environment, and a development environment. Tools for constructing different environments can allocate assets at different levels of granularity, can use different asset allocation techniques, and can be incapable of exchanging information with one another.